package com.ejy.commons.service;

import com.ejy.commons.enums.CommonEnum;

import java.util.Collection;
import java.util.List;

/**
 * @author WangYan
 * @description:
 * @date 2021/6/9 16:25
 */
public interface BaseService<PO, ID extends Long> {

    /**
     * 自定义 逻辑删除
     * 默认只查询state=1 有效的数据
     * 与分页用法一样
     * 先调用此方法 下一条sql 就会生效
     *
     * @Author WangYan
     * @Date 2021/6/10 16:07
     */
    void logicDelete(CommonEnum.StateEnum logicDelete);

    /**
     * 自定义 返回数据长度
     * 与分页用法一样
     * 先调用此方法 下一条sql 就会生效
     *
     * @Author: 汪焰
     * @Date: 2020/7/21 18:20
     * version 1.0.0
     **/
    void limit(int limit);

    int insert(PO po);

    /**
     * 根据id更新非空字段
     */
    int update(Object params);

    PO read(ID id);

    /**
     * read 默认PO返回类型
     */
    PO read(Object params);

    /**
     * read 自定义返回类型
     */
    <VO> VO read(Object params, Class<VO> targetClass);

    List<PO> list(Collection<ID> ids);

    /**
     * list 默认PO返回类型
     */
    List<PO> list(Object params);

    /**
     * list 自定义返回类型
     **/
    <VO> List<VO> list(Object params, Class<VO> targetClass);

    Integer sum(String sqlColumn, Object params);

    int count(Object params);

    int count(String key, Object value);


}
